void main() {
  //1、算术运算符
  /**
   *  + - x /
   *  ~/  整除
   *  % 取余
   */
  var result1 = 1 + 1;
  var result2 = 5 - 1;
  var result3 = 3 * 5;
  var result4 = 3 / 5; //0.6
  var result5 = 3 ~/ 5; //0
  var result6 = 5 % 3; //2
  //2、条件运算符 >、<、=、==、!=、>=、<=
  //3、逻辑运算符 ||、&&、！
  //4、位运算符： &（位与） 、|（位非）、~（位非）、^（异或）、<<（左移）、>>（右移）
  //5、三目运算符
  var value;
  var isOpened = (value == 1) ? true : false;
  //6、空安全运算符

  /**
   * | result = expr1 ?? expr2 | 若expr1为null, 返回expr2的值，否则返回expr1的值 |
   * | expr1 ??= expr2 | 若expr1为null, 则把expr2的值赋值给expr1 |
   * | result = expr1?.value | 若expr1为null, 就返回null,否则就返回expr1.value的值 |
   */
  List<int> intList = [12, 13, 14];
  int length = intList?.length;
  //7、级联操作符(..)
  Person p = Person()
    ..name = "张三"
    ..age = 20;
  //8、重载运算符 + - x / 等运算符可以通过operator添加到到普通类上，为该类的定义这些运算，例如Person类，
  // 其实相当于声明了一个方法，只是外面调用方便
}

class Person {
  String name;
  int age;

  Person operator +(Person other) {
    return new Person()
      ..name = other.name
      ..age = age - other.age;
  }
}
